
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Adam Kubach
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Specialized layer for city names.
//
///////////////////////////////////////////////////////////////////////////////

#include "Minerva/Plugins/OSM/AdminBoundaryLayer.h"
#include "Minerva/Plugins/OSM/LineJob.h"

#include "Usul/Factory/RegisterCreator.h"
#include "Usul/Strings/Format.h"
#include "Usul/User/Directory.h"

using namespace Minerva::Layers::OSM;

USUL_FACTORY_REGISTER_CREATOR_WITH_NAME ( "OSM:AdminBoundaryLayer", AdminBoundaryLayer );

///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

AdminBoundaryLayer::AdminBoundaryLayer() : BaseClass()
{
  this->_initializeCache ( "admin_boundaries" );

  /// Possible place values: http://wiki.openstreetmap.org/wiki/Key:boundary
  this->addRequest ( 0, Predicate ( "boundary", "administrative" ) );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

AdminBoundaryLayer::~AdminBoundaryLayer()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Launch a job for the predicate.
//
///////////////////////////////////////////////////////////////////////////////

AdminBoundaryLayer::JobPtr AdminBoundaryLayer::_launchJob ( 
    const Predicate& predicate, 
    const Extents& extents, 
    unsigned int level, 
    Usul::Jobs::Manager *manager, 
    Usul::Interfaces::IUnknown::RefPtr caller )
{
  return new LineJob ( manager, this->_getCache(), this->url(), extents, level, predicate, caller );
}
